package com.dc.designPattern._18_memento.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * Description: 备忘录模式_守护者对象
 * @author: gdc
 * @date: 2021/6/7
 * @version 1.0
 */
@Data
public class Caretaker {

    /**
     * 如果只保存一次状态
     */
    private Memento memento;
    /**
     * 对游戏角色保存多次状态
     */
    private List<Memento> mementos = Lists.newArrayList();
    /**
     * 对多个游戏角色保存多个状态
     */
    private Map<String, List<Memento>> roleMementos = Maps.newHashMap();

    // -------------------------------《 保存一个状态 》--------------------------------

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }

    // -------------------------------《 保存多个状态 》--------------------------------

    public Memento getMementoByIndex(int index) {
        return mementos.get(index);
    }

    public void addMemento(Memento memento) {
        this.mementos.add(memento);
    }

    // --------------------------《 保存多个角色的多个状态 》----------------------------

    public Memento getRoleMementoByIndex(String role, int index) {
        List<Memento> mementos = roleMementos.get(role);
        if (CollectionUtil.isEmpty(mementos)) {
            return new Memento();
        } else {
            return mementos.get(index);
        }
    }

    public void addMementoByRole(String role, Memento memento) {
        List<Memento> mementos = roleMementos.get(role);
        if (CollectionUtil.isEmpty(mementos)) {
            roleMementos.put(role, Lists.newArrayList(memento));
        } else {
            mementos.add(memento);
        }
    }
}
